

package billrestauration.extra.validation;
import java.util.Locale;

import org.springframework.validation.Errors;
import org.springframework.validation.Validator;

import billrestaurant.extra.upload.FileUpload;
import billrestauration.entities.Adresse;
import billrestauration.entities.Menu;
import billrestauration.entities.Prix;
import billrestauration.entities.Utilisateur;


 
public class BillRestaurationValidator implements Validator {  
	  
	 private org.springframework.context.support.ReloadableResourceBundleMessageSource messageresolver;
	  
	 
	 public org.springframework.context.support.ReloadableResourceBundleMessageSource getMessageresolver() {
		return messageresolver;
	}
	public void setMessageresolver(
			org.springframework.context.support.ReloadableResourceBundleMessageSource messageresolver) {
		this.messageresolver = messageresolver;
	}
	public void validate(Object subject, Errors errors) {  
	  if(subject instanceof FileUpload )
		  validateFile(subject, errors);
	  if(subject instanceof Utilisateur )
		  validateUtilisateur(subject, errors);
	  if(subject instanceof Menu )
		  validateMenu(subject, errors);
	    if(subject instanceof Prix )
		  validatePrix(subject, errors);
	   if(subject instanceof Adresse )
		  validateAdresse(subject, errors);
		
	  
	 }
	public void validateReservationMenu(Object subject, Errors errors){
		
		if(null==subject)
			 errors.rejectValue(null, "menuintrouvable",  
				     "le menu demandé n'existe pas!"); 
			Menu m=(Menu)subject;
		if(m.getQuantite()<=0)
		 errors.rejectValue("quantite", "menuepuise",  
			     "il n'ya plus de plat disponible pour ce menu"); 
		
	}
	public void validate(Object subject, Errors errors,Locale locale) {  
		  if(subject instanceof FileUpload )
			  validateFile(subject, errors,locale);
		  if(subject instanceof Utilisateur )
			  validateUtilisateur(subject, errors,locale);
		  if(subject instanceof Menu )
			  validateMenu(subject, errors,locale);
		    if(subject instanceof Prix )
			  validatePrix(subject, errors,locale);
		   if(subject instanceof Adresse )
			  validateAdresse(subject, errors,locale);
			
		  
		 }
private void validateAdresse(Object subject, Errors errors) {
		// TODO Auto-generated method stub
		Adresse adr=(Adresse)subject;
		if(adr.getCodepostale()<=0)
			 errors.rejectValue("codepostale", "adresse.codepostale.invalide",  new Integer[]{(adr.getCodepostale())},
				     "le code postale doit être une valeur strictement positive!"); 
		if(adr.getPays()==""||adr.getPays()==null)
			 errors.rejectValue("pays", "adresse.pays.invalide",  
				     "le pays ne doit être vide"); 
		if(adr.getVille()==""||adr.getVille()==null)
			 errors.rejectValue("ville", "adresse.ville.invalide",  
				     "la ville doit pas être vide"); 
		if(adr.getVoie()==""||adr.getVoie()==null)
			 errors.rejectValue("voie", "adresse.voie.invalide",  
				     "la voie doit pas être vide"); 
				 
	}
private void validatePrix(Object subject, Errors errors) {
		// TODO Auto-generated method stub
		Prix p=(Prix)subject;
		if(p.getPrix()<=0)
			errors.rejectValue("prix", "prix.prix.invalide",  
				     "le prix doit être une valeur positive"); 
			
	}
private void validateMenu(Object subject, Errors errors) {
		// TODO Auto-generated method stub
		Menu m=(Menu)subject;
		if(m.getDescription().compareTo("")==0||m.getDescription()==null)
			errors.rejectValue("description", "menu.description.invalide",  
				     "veuillez donnez une description du menu"); 
		if(m.getNom().compareTo("")==0||m.getNom()==null)
			errors.rejectValue("nom", "menu.nom.invalide",  
				     "veuillez donnez un nom au menu"); 
		if(m.getQuantite()<=0)
			errors.rejectValue("quantite", "menu.quantite.invalide",  
				     "la quantité doit être une valeur positive"); 
		if(m.getPrix().getPrix()<=0)
			errors.rejectValue("prix.prix", "menu.prix.invalide",  
				     "le prix du menu doit être une valeur positive"); 
			
	}
private void validateUtilisateur(Object subject, Errors errors) {
		// TODO Auto-generated method stub
		Utilisateur u=(Utilisateur)subject;
		if(u.getUsername()==null||u.getUsername().compareTo("")==0)
			errors.rejectValue("username", "utilisateur.username.invalide",  
				     "le nom d'utilisateur doit pas être vide!!"); 
		if(u.getPassword()==null||u.getPassword().compareTo("")==0)
			errors.rejectValue("password", "utilisateur.password.invalide",  
				     "veuillez renseigner un mot de passe!!"); 
		else if( u.getPassword().length()<7)
			errors.rejectValue("password", "utilisateur.password.tropcourt",  
				     "votre mot de passe doit contenir au moins 8 caractères!!"); 
		
	
		if(u.getUsername()!=null&&u.getUsername().length()<4)
			errors.rejectValue("username", "utilisateur.username.tropcourt",  
				     "le nom d'utilisateur est trop court!!"); 
	
		Adresse adr=u.getAdresse();
		if(adr.getCodepostale()<=0)
			 errors.rejectValue("adresse.codepostale", "utilisateur.adresse.codepostale.invalide",  
				     "le code postale doit être une valeur strictement positive!"); 
		if(adr.getPays()==""||adr.getPays()==null)
			 errors.rejectValue("adresse.pays", "utilisateur.adresse.codepostale.invalide",  
				     "le pays ne doit être vide"); 
		if(adr.getVille()==""||adr.getVille()==null)
			 errors.rejectValue("adresse.ville", "utilisateur.adresse.ville.invalide",  
				     "la ville doit pas être vide"); 
		if(adr.getVoie()==""||adr.getVoie()==null)
			 errors.rejectValue("adresse.voie", "utilisateur.adresse.voie.invalide",  
				     "la voie doit pas être vide"); 
	}
private void validateFile(Object uploadedFile, Errors errors){
	 FileUpload file = (FileUpload) uploadedFile;  
	  long size=file.getFile().getSize();
	  
	  if (size == 0) {  
	   errors.rejectValue("file", "fileUpload.nofileselected",  
	     "aucun fichier n'a été selectionné<br>Veuillez en selectionner!"); 
	   errors.rejectValue("file", "fileUpload.fileSize.error",  
			     "taille du fichier trop petit!");  
	  }  
}





/**
 * with local
 */
private void validateAdresse(Object subject, Errors errors,Locale locale) {
	// TODO Auto-generated method stub
	Adresse adr=(Adresse)subject;
	if(adr.getCodepostale()<=0)
		 errors.rejectValue("codepostale", "adresse.codepostale.invalide",  
				 messageresolver.getMessage("adresse.codepostale.invalide", null, locale)); 
	if(adr.getPays()==""||adr.getPays()==null)
		 errors.rejectValue("pays", "adresse.pays.invalide",  
				 messageresolver.getMessage( "adresse.pays.invalide", null, locale)); 
	if(adr.getVille()==""||adr.getVille()==null)
		 errors.rejectValue("ville", "adresse.ville.invalide",  
				 messageresolver.getMessage( "adresse.ville.invalide", null, locale)); 
	if(adr.getVoie()==""||adr.getVoie()==null)
		 errors.rejectValue("voie", "adresse.voie.invalide",  
				 messageresolver.getMessage( "adresse.voie.invalide", null, locale)); 
			 
}
private void validatePrix(Object subject, Errors errors,Locale locale) {
	// TODO Auto-generated method stub
	Prix p=(Prix)subject;
	if(p.getPrix()<=0)
		errors.rejectValue("prix", "prix.prix.invalide",  
			     "le prix doit être une valeur positive"); 
		
}
private void validateMenu(Object subject, Errors errors,Locale locale) {
	// TODO Auto-generated method stub
	Menu m=(Menu)subject;
	if(m.getDescription().compareTo("")==0||m.getDescription()==null)
		errors.rejectValue("description", "menu.description.invalide",  
			     "veuillez donnez une description du menu"); 
	if(m.getNom().compareTo("")==0||m.getNom()==null)
		errors.rejectValue("nom", "menu.nom.invalide",  
			     "veuillez donnez un nom au menu"); 
	if(m.getQuantite()<=0)
		errors.rejectValue("quantite", "menu.quantite.invalide",  
			     "la quantité doit être une valeur positive"); 
	if(m.getPrix().getPrix()<=0)
		errors.rejectValue("prix.prix", "menu.prix.invalide",  
			     "le prix du menu doit être une valeur positive"); 
		
}
private void validateUtilisateur(Object subject, Errors errors,Locale locale) {
	// TODO Auto-generated method stub
	Utilisateur u=(Utilisateur)subject;
	if(u.getUsername()==null||u.getUsername().compareTo("")==0)
		errors.rejectValue("username", "utilisateur.username.invalide",  new String[]{u.getUsername()},
			     "le nom d'utilisateur doit pas être vide!!"); 
	if(u.getPassword()==null||u.getPassword().compareTo("")==0)
		errors.rejectValue("password", "utilisateur.password.invalide",  
			     "veuillez renseigner un mot de passe!!"); 
	else if( u.getPassword().length()<7)
		errors.rejectValue("password", "utilisateur.password.tropcourt",  
			     "votre mot de passe doit contenir au moins 8 caractères!!"); 
	

	if(u.getUsername()!=null&&u.getUsername().length()<4)
		errors.rejectValue("username", "utilisateur.username.tropcourt", new String[]{u.getUsername()}, 
			     "le nom d'utilisateur est trop court!!"); 

	Adresse adr=u.getAdresse();
	if(adr.getCodepostale()<=0)
		 errors.rejectValue("adresse.codepostale", "utilisateur.adresse.codepostale.invalide",  
			     "le code postale doit être une valeur strictement positive!"); 
	if(adr.getPays()==""||adr.getPays()==null)
		 errors.rejectValue("adresse.pays", "utilisateur.adresse.codepostale.invalide",  
			     "le pays ne doit être vide"); 
	if(adr.getVille()==""||adr.getVille()==null)
		 errors.rejectValue("adresse.ville", "utilisateur.adresse.ville.invalide",  
			     "la ville doit pas être vide"); 
	if(adr.getVoie()==""||adr.getVoie()==null)
		 errors.rejectValue("adresse.voie", "utilisateur.adresse.voie.invalide",  
			     "la voie doit pas être vide"); 
}
private void validateFile(Object uploadedFile, Errors errors,Locale locale){
 FileUpload file = (FileUpload) uploadedFile;  
  long size=file.getFile().getSize();
  
  if (size == 0) {  
   errors.rejectValue("file", "fileUpload.nofileselected",  
     "aucun fichier n'a été selectionné<br>Veuillez en selectionner!"); 
   errors.rejectValue("file", "fileUpload.fileSize.error",  
		     "taille du fichier trop petit!");  
  }  
}
	@Override
	public boolean supports(Class<?> arg0) {
		// TODO Auto-generated method stub
		return false;
	}  

}
